<?php

/**
 * BUSQUEDA actions.
 *
 * @package    OPENBIBLIOSOFT
 * @subpackage BUSQUEDA
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
 */
class BUSQUEDAActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex(sfWebRequest $request)
  {
    //$this->forward('default', 'module');
  }
  
	public function executeListar()
	{
		$titulo = $this->getRequestParameter('Titulo');
		$isbn = $this->getRequestParameter('Isbn');
		$palabraClave = $this->getRequestParameter('PalabraClave');
		$autorPrimerNombre = $this->getRequestParameter('PrimerNombre');
		$autorSegundoNombre = $this->getRequestParameter('SegundoNombre');
		$autorPrimerApellido = $this->getRequestParameter('PrimerApellido');
		$autorSegundoApellido = $this->getRequestParameter('SegundoApellido');
		
		$conexion = new Criteria();
		$conexion->addJoin(LibroPeer::ISBN, EjemplarPeer::ISBN);
		$conexion->addJoin(LibroPeer::CODIGOAREACONO, AreaconocimientoPeer::CODIGO);
		$conexion->addJoin(LibroPeer::CODIGOEDITORIAL, EditorialPeer::CODIGO);
		
		if($titulo != '')
		{
			$titulo = "%".$titulo."%";
			$conexion->add(LibroPeer::TITULO, $titulo, Criteria::LIKE);
		}
		
		if($isbn != '')
		{
			$isbn = "%".$isbn."%";
			$conexion->add(LibroPeer::ISBN, $isbn, Criteria::LIKE);
		}
		
		if($palabraClave != '')
		{
			$palabraClave = "%".$palabraClave."%";
			$conexion->addJoin(LibroPeer::ISBN, PalabrasclavePeer::ISBN);
			$conexion->addJoin(PalabrasclavePeer::IDPALABRA, PalabraPeer::ID);
			$conexion->add(PalabraPeer::PALABRA, $palabraClave, Criteria::LIKE);
		}
		
		if($autorPrimerApellido != '')
		{
			$autorPrimerApellido = "%".$autorPrimerApellido."%";
			$conexion->addJoin(LibroautorPeer::ISBN, LibroPeer::ISBN);
			$conexion->addJoin(AutorPeer::CODIGO, LibroautorPeer::CODIGOAUTOR);
			$conexion->add(AutorPeer::PRIMERAPELLIDO, $autorPrimerApellido, Criteria::LIKE);
		}
		
		if($autorSegundoApellido != '')
		{
			$autorSegundoApellido = "%".$autorSegundoApellido."%";
			$conexion->addJoin(LibroautorPeer::ISBN, LibroPeer::ISBN);
			$conexion->addJoin(AutorPeer::CODIGO, LibroautorPeer::CODIGOAUTOR);
			$conexion->add(AutorPeer::SEGUNDOAPELLIDO, $autorSegundoApellido, Criteria::LIKE);
		}
		
		if($autorPrimerNombre != '')
		{
			$autorPrimerNombre = "%".$autorPrimerNombre."%";
			$conexion->addJoin(LibroautorPeer::ISBN, LibroPeer::ISBN);
			$conexion->addJoin(AutorPeer::CODIGO, LibroautorPeer::CODIGOAUTOR);
			$conexion->add(AutorPeer::PRIMERNOMBRE, $autorPrimerNombre, Criteria::LIKE);
		}
		
		if($autorSegundoNombre != '')
		{
			$autorSegundoNombre = "%".$autorSegundoNombre."%";
			$conexion->addJoin(LibroautorPeer::ISBN, LibroPeer::ISBN);
			$conexion->addJoin(AutorPeer::CODIGO, LibroautorPeer::CODIGOAUTOR);
			$conexion->add(AutorPeer::SEGUNDONOMBRE, $autorSegundoNombre, Criteria::LIKE);
		}
		
		$conexion->setDistinct(); 
		
		$numeroLibros = EjemplarPeer::doCount($conexion);
		$conexion->setLimit($this->getRequestParameter('limit'));
		$conexion->setOffset($this->getRequestParameter('start'));
		$ejemplares = EjemplarPeer::doSelect($conexion);
		$pos = 0;
		$nbrows=0;
		$datos;
		
		foreach ($ejemplares As $temporal)
		{
			$datos[$pos]['ejemplarIsbn']=$temporal->getLibro()->getIsbn();
			$datos[$pos]['ejemplarTitulo']=$temporal->getLibro()->getTitulo();
			$datos[$pos]['ejemplarAnoPublicacion']=$temporal->getLibro()->getAnopublicacion();
			$datos[$pos]['ejemplarIdioma']=$temporal->getLibro()->getIdioma();
			$datos[$pos]['ejemplarAreaConocimientoCodigo']=$temporal->getLibro()->getAreaconocimiento()->getCodigo();
			$datos[$pos]['ejemplarAreaConocimientoNombre']=$temporal->getLibro()->getAreaconocimiento()->getNombre();
			$datos[$pos]['ejemplarEditorialCodigo']=$temporal->getLibro()->getEditorial()->getCodigo();
			$datos[$pos]['ejemplarEditorialNombre']=$temporal->getLibro()->getEditorial()->getNombre();
			$autoresNombres=null;
			$autoresCodigos=null;
			$palabrasClaveNombres=null;
			$palabrasClaveCodigos=null;
			$this->getAutores($temporal->getLibro()->getIsbn(), $autoresCodigos, $autoresNombres);
			$this->getPalabrasClave($temporal->getLibro()->getIsbn(), $palabrasClaveCodigos, $palabrasClaveNombres);
			$datos[$pos]['ejemplarAutoresCodigos']=$autoresCodigos;
			$datos[$pos]['ejemplarAutoresNombres']=$autoresNombres;
			$datos[$pos]['ejemplarPalabrasClaveCodigos']=$palabrasClaveCodigos;
			$datos[$pos]['ejemplarPalabrasClaveNombres']=$palabrasClaveNombres;
			$datos[$pos]['ejemplarId']=$temporal->getIdejemplar();
			$datos[$pos]['ejemplarEstado']=$temporal->getEstado();
			//$datos[$pos]['ejemplarSala']=$temporal->getSala();
			//$datos[$pos]['ejemplarPasillo']=$temporal->getPasillo();
			//$datos[$pos]['ejemplarEstante']=$temporal->getEstante();
			//$datos[$pos]['ejemplarCajon']=$temporal->getCajon();
			
			$pos++;
			$nbrows++;
		}
		
		if($nbrows>0){
			$jsonresult = json_encode($datos);
			return  $this->renderText('({"total":"'.$numeroLibros.'","results":'.$jsonresult.'})');
		}
		else {
			return  $this->renderText('({"total":"0", "results":""})');
		}
	}
	
	public function getAutores($isbn, &$autoresCodigos, &$autoresNombres)
	{
		$conexion = new Criteria();
		$conexion->add(LibroautorPeer::ISBN, $isbn);
		
		if($conexion)
		{
			$autores = LibroautorPeer::doSelect($conexion);
			foreach ($autores As $temporal)
			{
				$autoresCodigos.=$temporal->getAutor()->getCodigo().",";
				$autoresNombres.=$temporal->getAutor()->getPrimerapellido().", ".$temporal->getAutor()->getPrimernombre().". ";
			}
			if($autoresCodigos)
			{
				$autoresCodigos = substr($autoresCodigos, 0, -1);
			}
			if($autoresNombres)
			{
				$autoresNombres = substr($autoresNombres, 0, -2);
			}
		}
	}
	
	public function getPalabrasClave($isbn, &$palabrasClaveCodigos, &$palabrasClaveNombres)
	{
		$conexion = new Criteria();
		$conexion->add(PalabrasclavePeer::ISBN, $isbn);
		
		if($conexion)
		{
			$palabrasClave = PalabrasclavePeer::doSelect($conexion);
			foreach ($palabrasClave As $temporal)
			{
				$palabrasClaveCodigos.=$temporal->getPalabra()->getId().",";
				$palabrasClaveNombres.=$temporal->getPalabra()->getPalabra().", ";
			}
			if($palabrasClaveCodigos)
			{
				$palabrasClaveCodigos = substr($palabrasClaveCodigos, 0, -1);
			}
			if($palabrasClaveNombres)
			{
				$palabrasClaveNombres = substr($palabrasClaveNombres, 0, -2);
			}
		}
	}
	
	public function executeReservar()
	{
		$idEjemplar = $this->getRequestParameter('IdEjemplar');
		$idPrestamo;
		$ordenprestamo = new Ordenprestamo();
		$ordenprestamo->setIdejemplar($idEjemplar);
		$ordenprestamo->setFecha(time());

		try
		{
			$ejemplar = EjemplarPeer::retrieveByPK($idEjemplar);
			$ordenprestamo->save();
			$ejemplar->setEstado('Reservado');
			$ejemplar->save();
			$idPrestamo=$ordenprestamo->getNumeroorden();
		}
		catch (Exception $excepcion)
		{
			return  $this->renderText("({success: false, errors: { reason: 'Exception: Hubo un problema haciendo la reserva: ".$idEjemplar."'}})");
		}
		return  $this->renderText("({success: true, mensaje:'La reserva fue hecha exitosamente, <br /> numero de reserva: ".$idPrestamo."'})");
	}
}
